/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-06-19
 * Time: 23:08
 */

public class Solution {
    public int longestOnes(int[] nums, int k) {
        int len = nums.length;
        int left = 0;
        int right = 0;
        int max = 0;
        int count1 = 0;
        while (right < len) {
            // 数值为 1
            if (nums[right] == 1) {
                count1++;
                right++;
            }else {
                // 数值为 0, 但是可以翻转
                if (k > 0) {
                    count1++;
                    right++;
                    k--;
                }else {
                    // 注意更新的时机, 只要是遇到不能翻转的时候就要进行 更新最大值
                    max = Math.max(max, count1);
                    // right 数值为 0 且不能翻转, 移动左指针
                    if (nums[left] == 0) {
                        // 左指针为 0
                        k++;
                    }
                    //不管左边为 1 还是 0 都需 -- ,因为滑动窗口里面的值我们都看作 1 了
                    count1--;
                    left++;
                }
            }
        }
        // 预防最后一次没有更新
        return Math.max(max, count1);
    }
}
